using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools._Configuration._LRS
{
    /// <summary>
    /// <para>Create LRS</para>
    /// <para>Creates a linear referencing system (LRS) and minimum schema items in a specified workspace.</para>
    /// <para>在指定工作空间中创建线性参照系统 （LRS） 和最小架构项。</para>
    /// </summary>    
    [DisplayName("Create LRS")]
    public class CreateLRS : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateLRS()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_workspace">
        /// <para>Input Location</para>
        /// <para>The file or multipurpose geodatabase where the LRS and minimum schema will be created.</para>
        /// <para>将在其中创建 LRS 和最小方案的文件或多用途地理数据库。</para>
        /// </param>
        /// <param name="_lrs_name">
        /// <para>LRS Name</para>
        /// <para>The name of the output LRS.</para>
        /// <para>输出 LRS 的名称。</para>
        /// </param>
        /// <param name="_centerline_feature_class_name">
        /// <para>Centerline Feature Class Name</para>
        /// <para>Name of the output centerline feature class.</para>
        /// <para>输出中心线要素类的名称。</para>
        /// </param>
        /// <param name="_calibration_point_feature_class_name">
        /// <para>Calibration Point Feature Class Name</para>
        /// <para>Name of the output calibration point feature class.</para>
        /// <para>输出校准点要素类的名称。</para>
        /// </param>
        /// <param name="_redline_feature_class_name">
        /// <para>Redline Feature Class Name</para>
        /// <para>Name of the output redline feature class.</para>
        /// <para>输出红线要素类的名称。</para>
        /// </param>
        /// <param name="_centerline_sequence_table_name">
        /// <para>Centerline Sequence Table Name</para>
        /// <para>Name of the output centerline sequence table.</para>
        /// <para>输出中心线序列表的名称。</para>
        /// </param>
        /// <param name="_spatial_reference">
        /// <para>Spatial Reference</para>
        /// <para>The spatial reference for the output feature classes. When executing from a Python script, you can use the Well Known ID (WKID) for the spatial reference.</para>
        /// <para>输出要素类的空间参考。从 Python 脚本执行时，可以使用已知 ID （WKID） 作为空间参考。</para>
        /// </param>
        public CreateLRS(object _in_workspace, object _lrs_name, object _centerline_feature_class_name, object _calibration_point_feature_class_name, object _redline_feature_class_name, object _centerline_sequence_table_name, object _spatial_reference)
        {
            this._in_workspace = _in_workspace;
            this._lrs_name = _lrs_name;
            this._centerline_feature_class_name = _centerline_feature_class_name;
            this._calibration_point_feature_class_name = _calibration_point_feature_class_name;
            this._redline_feature_class_name = _redline_feature_class_name;
            this._centerline_sequence_table_name = _centerline_sequence_table_name;
            this._spatial_reference = _spatial_reference;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Create LRS";

        public override string CallName => "locref.CreateLRS";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_workspace, _lrs_name, _centerline_feature_class_name, _calibration_point_feature_class_name, _redline_feature_class_name, _centerline_sequence_table_name, _spatial_reference, _xy_tolerance, _z_tolerance, _xy_resolution, _z_resolution, _out_workspace, _out_centerline_feature_class, _out_calibration_point_feature_class, _out_redline_feature_class, _out_centerline_sequence_table];

        /// <summary>
        /// <para>Input Location</para>
        /// <para>The file or multipurpose geodatabase where the LRS and minimum schema will be created.</para>
        /// <para>将在其中创建 LRS 和最小方案的文件或多用途地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Location")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_workspace { get; set; }


        /// <summary>
        /// <para>LRS Name</para>
        /// <para>The name of the output LRS.</para>
        /// <para>输出 LRS 的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("LRS Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _lrs_name { get; set; }


        /// <summary>
        /// <para>Centerline Feature Class Name</para>
        /// <para>Name of the output centerline feature class.</para>
        /// <para>输出中心线要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Feature Class Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_feature_class_name { get; set; }


        /// <summary>
        /// <para>Calibration Point Feature Class Name</para>
        /// <para>Name of the output calibration point feature class.</para>
        /// <para>输出校准点要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Calibration Point Feature Class Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _calibration_point_feature_class_name { get; set; }


        /// <summary>
        /// <para>Redline Feature Class Name</para>
        /// <para>Name of the output redline feature class.</para>
        /// <para>输出红线要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Redline Feature Class Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _redline_feature_class_name { get; set; }


        /// <summary>
        /// <para>Centerline Sequence Table Name</para>
        /// <para>Name of the output centerline sequence table.</para>
        /// <para>输出中心线序列表的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Centerline Sequence Table Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _centerline_sequence_table_name { get; set; }


        /// <summary>
        /// <para>Spatial Reference</para>
        /// <para>The spatial reference for the output feature classes. When executing from a Python script, you can use the Well Known ID (WKID) for the spatial reference.</para>
        /// <para>输出要素类的空间参考。从 Python 脚本执行时，可以使用已知 ID （WKID） 作为空间参考。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _spatial_reference { get; set; }


        /// <summary>
        /// <para>XY Tolerance</para>
        /// <para>The xy-tolerance of the output feature classes.</para>
        /// <para>输出要素类的 xy 容差。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("XY Tolerance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _xy_tolerance { get; set; } = null;


        /// <summary>
        /// <para>Z Tolerance</para>
        /// <para>The z-tolerance of the output feature classes.</para>
        /// <para>输出要素类的 z 容差。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Tolerance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _z_tolerance { get; set; } = null;


        /// <summary>
        /// <para>XY Resolution</para>
        /// <para>The xy-resolution of the output feature classes.</para>
        /// <para>输出要素类的 xy 分辨率。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("XY Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _xy_resolution { get; set; } = null;


        /// <summary>
        /// <para>Z Resolution</para>
        /// <para>The z-resolution of the output feature classes.</para>
        /// <para>输出要素类的 z 分辨率。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _z_resolution { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Location</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Location")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_workspace { get; set; }


        /// <summary>
        /// <para>Output Centerline Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Centerline Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_centerline_feature_class { get; set; }


        /// <summary>
        /// <para>Output Calibration Point Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Calibration Point Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_calibration_point_feature_class { get; set; }


        /// <summary>
        /// <para>Output Redline Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Redline Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_redline_feature_class { get; set; }


        /// <summary>
        /// <para>Output Centerline Sequence Table</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Centerline Sequence Table")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_centerline_sequence_table { get; set; }


        public CreateLRS SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}